package com.tgy.MyFlowable.workflow.service;

import cn.hutool.core.lang.Dict;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ctsi.workflow.dto.FlwInstanceDTO;
import com.ctsi.workflow.dto.FlwUserTaskVO;
import com.ctsi.workflow.vo.FlwCommentHistoryVO;
import com.ctsi.workflow.vo.FlwInstanceVO;
import com.fasterxml.jackson.databind.JsonNode;

import java.util.List;
import java.util.Map;

/**
 * 流程实例业务接口
 *
 * @version 1.0
 * @author: wang xiao xiang
 * @date: 2021/8/6 16:37
 */
public interface IFlwInstanceService {
    /**
     * 查询流程实例
     *
     * @param flwInstanceDTO 查询参数
     * @return 查询结果集
     */
    Page<FlwInstanceVO> page(FlwInstanceDTO flwInstanceDTO);

    /**
     * 流程实例的历史任务节点，用于退回时选择节点
     *
     * @param flwInstanceDTO 查询参数
     * @return 历史任务节点
     */
    List<FlwUserTaskVO> hisUserTask(FlwInstanceDTO flwInstanceDTO);

    /**
     * 流程实例的流程图，显示当前节点和走过的节点
     *
     * @param flwInstanceDTO 查询参数
     * @return 流程图数据
     */
    JsonNode trace(FlwInstanceDTO flwInstanceDTO);

    /**
     * 激活或挂起流程实例
     *
     * @param flwInstanceDTO 查询参数
     * @param isSuspend      是否挂起
     */
    void activeOrSuspend(FlwInstanceDTO flwInstanceDTO, boolean isSuspend);

    /**
     * 流程实例的审批记录
     *
     * @param flwInstanceDTO 查询参数
     * @return 审批记录
     */
    List<FlwCommentHistoryVO> commentHistory(FlwInstanceDTO flwInstanceDTO);

    /**
     * 终止流程实例
     *
     * @param flwInstanceDTO 终止参数
     */
    void end(FlwInstanceDTO flwInstanceDTO);

    /**
     * 删除流程实例
     *
     * @param flwInstanceDTOList 删除参数
     */
    void del(List<FlwInstanceDTO> flwInstanceDTOList);

    /**
     * 获取流程实例中表单填写的数据
     *
     * @param flwInstanceDTO
     * @return
     */
    Map<String, Object> formData(FlwInstanceDTO flwInstanceDTO);

    /**
     * 加签人员选择器
     *
     * @param flwInstanceDTO
     * @return
     */
    List<Dict> addSignUserSelector(FlwInstanceDTO flwInstanceDTO);

    /**
     * 减签人员选择器
     *
     * @param flwInstanceDTO
     * @return
     */
    List<Dict> delSignUserSelector(FlwInstanceDTO flwInstanceDTO);

    /**
     * 根据流程实例id获取流程实例详情
     *
     * @param processInstanceId 流程实例id
     * @return
     */
    FlwInstanceVO detail(String processInstanceId);
}
